package com.ruoyi.common.utils;

import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author cmz
 * @Date 2024-06-27 13:22
 */
public class GetDateStringUtils {
    /**
     * 生成指定月份下的所有日期字符串列表  
     *
     * @param year 年份  
     * @param monthValue 月份值（1代表一月，2代表二月，依此类推）  
     * @return 指定月份下的所有日期字符串列表
     */
    public static List<String> generateDatesForMonth(int year, int monthValue) {
        // 验证月份值是否在有效范围内  
        if (monthValue < 1 || monthValue > 12) {
            throw new IllegalArgumentException("Invalid month value: " + monthValue);
        }

        // 获取该月份的第一天和最后一天  
        Month month = Month.of(monthValue);
        LocalDate firstDayOfMonth = LocalDate.of(year, month, 1);
        LocalDate lastDayOfMonth = firstDayOfMonth.plusMonths(1).minusDays(1);

        // 创建一个列表来存储日期字符串  
        List<String> dateStrings = new ArrayList<>();

        // 遍历该月份的所有日期，并添加到列表中  
        for (LocalDate date = firstDayOfMonth; !date.isAfter(lastDayOfMonth); date = date.plusDays(1)) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
            String dateString = date.format(formatter);
            dateStrings.add(dateString);
        }

        return dateStrings;
    }

    /**
     * 生成两个日期字符串之间的所有字段  
     *
     * @param startDateStr 开始日期  
     * @param endDateStr 结束日期
     * @return 生成两个日期字符串之间的所有字段列表
     */
    public static List<String> getDateStr(String startDateStr, String endDateStr) {
        // 定义日期格式  
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");

        // 解析起始和结束日期字符串  
        LocalDate startDate = LocalDate.parse(startDateStr, formatter);
        LocalDate endDate = LocalDate.parse(endDateStr, formatter);

        // 使用循环生成日期字符串  
        List<String> dateList = new ArrayList<>();
        for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
            // 格式化并打印日期  
            String formattedDate = date.format(formatter);
            dateList.add(formattedDate);
        }
        return dateList;
    }
    
}
